package DoblePointer;//输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
//
// 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。 
//
// 
//
// 示例 1： 
//
// 输入：target = 9
//输出：[[2,3,4],[4,5]]
// 
//
// 示例 2： 
//
// 输入：target = 15
//输出：[[1,2,3,4,5],[4,5,6],[7,8]]
// 
//
// 
//
// 限制： 
//
// 
// 1 <= target <= 10^5 
// 
//
// 
// Related Topics 数学 双指针 枚举 👍 337 👎 0


import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

//leetcode submit region begin(Prohibit modification and deletion)
class findContinuousSequence {
    public int[][] findContinuousSequence(int target) {

        List<int[]> res = new ArrayList<>();
        int left = 1, right = 2;
        int sum = left+right;
        //双指针。滑动窗口，若窗口内的和小于目标，则需要扩大窗口，右指针右移  否则缩小窗口，左指针左移
        while(left <= target/2){
            if(sum>target){
                // 缩小窗口
                sum -= left++;
            }else if(sum<target){
                // 扩大窗口
                sum += ++right;
            }else{
                int[] inner = new int[right-left+1];
                for (int i = left; i <= right; i++) {
                    inner[i - left] = i ;
                }
                res.add(inner);
                //找到一组之后，窗口向后平移一位
                sum -= left++;
                sum += ++right;

            }
        }

        return res.toArray(new int[res.size()][]);

    }
}
//leetcode submit region end(Prohibit modification and deletion)
